package com.koron.css2.newProjectCenter.mapper;

import com.koron.css2.common.dto.DocDto;
import com.koron.css2.newProjectCenter.bean.PjInfoBean;
import com.koron.css2.newProjectCenter.bean.query.PjInfoQueryBean;
import com.koron.css2.newProjectCenter.vo.PjAdjustDetailVO;
import com.koron.css2.newProjectCenter.vo.PjInfoListVO;
import com.koron.css2.newProjectCenter.vo.PjInstallListVO;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

public interface PjInfoMapper {

	/**
	 * 修改工程单据表前材料金额
	 * @param pjInfo
	 * @return
	 */
	int updateBudgetMatrMeter(PjInfoBean pjInfo);

	/**
	 * 查询用水咨询列表
	 * @param bean
	 * @return
	 */
	List<PjInfoListVO> selectList(PjInfoQueryBean bean);

	/**
	 * 查询立户列表
	 * @param bean
	 * @return
	 */
	List<PjInstallListVO> selectInstallList(PjInfoQueryBean bean);

	
	/**
	 * 修改流程状态
	 * @param id
	 * @param processStatus
	 * @return
	 */
	Integer updateProcessStatus(@Param("id") String id, @Param("processStatus") String processStatus);

	/**
	 * 修改结算状态
	 * @param id
	 * @param settlementFlag
	 * @return
	 */
	Integer updateSettlementFlag(@Param("id") String id, @Param("settlementFlag") int settlementFlag);
	
	/**
	 * 通过主键查询工程单据
	 * @param id
	 * @return
	 */
	PjInfoBean selectById(String id);

	/**
	 * 通过单据编号查询工程单据
	 * @param billNo
	 * @return
	 */
	PjInfoBean selectByBillNo(String billNo);

	PjInfoBean selectEndByBillNo(String billNo);
	
	/**
	 * 通过流程实例ID查询工程单据
	 * @param processInstanceId
	 * @return
	 */
	PjInfoBean selectByProcessInstanceId(String processInstanceId);

	/**
	 * 添加登记
	 * @param pjInfoBean
	 * @return
	 */
	Integer addRegister(PjInfoBean pjInfoBean);

	/**
	 * 修改登记
	 * @param pjInfoBean
	 * @return
	 */
	Integer updateRegister(PjInfoBean pjInfoBean);
	
	/**
	 * 修改勘察邀约
	 * @param pjInfo
	 * @return
	 */
	int updateInvitationSurvey(PjInfoBean pjInfo);

	/**
	 * 修改勘察
	 * @param pjInfoBean
	 * @return
	 */
	Integer updateSurvey(PjInfoBean pjInfoBean);

	/**
	 * 修改设计
	 * @param pjInfoBean
	 * @return
	 */
	Integer updateDesign(PjInfoBean pjInfoBean);

	/**
	 * 修改预算
	 * @param pjInfoBean
	 * @return
	 */
	Integer updateBudget(PjInfoBean pjInfoBean);

	/**
	 * 修改工程收款
	 * @param pjInfoBean
	 * @return
	 */
	Integer updateCharge(PjInfoBean pjInfoBean);
	
	/**
	 * 保存施工派单
	 */
	Integer saveBuild(PjInfoBean pjInfoBean);
	
	/**
	 * 保存安装施工
	 */
	Integer saveInstallBuild(PjInfoBean pjInfoBean);
	/**
	 * 保存立户信息
	 */
	void saveRegisterAccount(PjInfoBean pjInfoBean);
	/**
	 * 保存验收
	 */
	Integer saveCheck(PjInfoBean pjInfoBean);
	/**
	 * 保存表记挂接
	 */
	void saveMeterHook(PjInfoBean pjInfoBean);
	/**
	 * 保存资料归档
	 */
	void saveDataArchive(PjInfoBean pjInfoBean);
	/**
	 * 编制结算节点保存
	 */
	Integer savePreSetmt(PjInfoBean pjInfoBean);

	/**
	 * 工程结算收款节点保存
	 */
	Integer savePjSetmtPayment(PjInfoBean pjInfoBean);
	
	/**
	 * 删除单据
	 * @param id
	 * @return
	 */
	Integer delete(@Param("id")String id);
	
	/**
	 * 删除多水表关联关系
	 * @param consultId
	 * @return
	 */
	Integer delMeter(@Param("consultId") String consultId);
	
	/**
	 * 更新装表数量
	 * @param id
	 * @param installAmount
	 * @return
	 */
	Integer updateInstallAmount(@Param("id") String id, @Param("installAmount") int installAmount);
	
	/**
	 * 将工程单锁定
	 * @param id
	 * @return
	 */
	int lock(@Param("id") String id);
	
	/**
	 * 工程单解锁
	 * @param id
	 * @return
	 */
	int unLock(@Param("id") String id);

	/**
	 * 施工完成修改满足立户标识
	 * @param consultId
	 */
	void updateOpenFlag(@Param("id")String consultId);

	/**
	 * 退款转预存
	 * @param consultId
	 */
	void updateBalance(@Param("accountBalance")Double accountBalance,@Param("id")String consultId);

	/**
	 * 结算转账备注保存
	 * @param comments
	 */
	void updateComments(@Param("comments")String comments,@Param("id")String consultId);

	/**
	 * 编制结算累计金额
	 * @param pjInfoBean
	 */
	void saveAccruedMoney(PjInfoBean pjInfoBean);
	
	/**
	 * 更新收款信息
	 */
	Integer saveCharge(PjInfoBean pjInfoBean);
	
	/**
	 * 保存结算收款
	 * @param pjInfoBean
	 */
	void saveRefund(PjInfoBean pjInfoBean);
	
	/**
	 * 查询工程款调整明细列表
	 * @param bean
	 * @return
	 */
	List<PjInfoListVO> selectAdjustmtList(PjInfoQueryBean bean);
	
	/**
	 * 查询工程款调整列表
	 * @param bean
	 * @return
	 */
	List<PjInfoListVO> selectAdjust(PjInfoQueryBean bean);
	
	/**
	 * 工程款冲红修改缴费状态
	 * @param receiptId
	 */
	void updateChargeFlag(@Param("id")String receiptId, @Param("updateName")String updateName, @Param("updateAccount")String updateAccount);

	/**
	 * 查询冲单金额
	 * @param id
	 * @return
	 */
	Double rushRedMoneyQuery(@Param("id")String id);

	/**
	 * 工程款调整详情
	 * @param id
	 * @return
	 */
	PjAdjustDetailVO selectAdjustDetail(@Param("id")String id);

	/**
	 * 更新工程能否终止状态
	 * @param pjId
	 */
	void updateTerminationFlag(@Param("terminationFlag")Integer terminationFlag, @Param("id")String pjId);


    BigDecimal getDepositByProjectCode(@Param("projectCode") String projectCode);

	void update(PjInfoBean pjInfoBean);

	/**
	 * 更新施工合同编号
	 * @param pjId
	 * @param contractNo
	 */
	void updateContractNo(@Param("pjId") String pjId, @Param("contractNo") String contractNo);

	void saveCheckInvite(PjInfoBean pjInfoBean);

	void updateSettlementFlagById(@Param("id") String id);

	PjInfoBean getSingle(PjInfoQueryBean pjInfoNewQuery);
	/**
	 * 通过id修改工建受理编号字段
	 */
	void updateGcjsSlbhById(@Param("id") String id,@Param("slbh")String slbh);
	/**
	 * 通过id修改工建受理编号字段
	 */
	void updateGcjsStaticById(@Param("id") String id,@Param("gcjsStatic")int gcjsStatic);
	/**
	 * 通过id查询工建受理编号字段
	 */
	String selectGcjsSlbhById(@Param("id") String id);

	void updateBoreAndMeterNum(@Param("id")String consultId, @Param("meterNum")int meterNum, @Param("maxBore")String maxBore);

    List<DocDto> selectPjDocStr(@Param("processState")String processState);

	/**
	 * 根据工程id查询工程类型
	 */
	String getPjType(@Param("consultId") String consultId);

	/**
	 * 根据工程id查询工程流程节点
	 */
	String getProcessState(String consultId);

	void updateTempId(PjInfoBean pjInfoBean);

	List<PjInfoListVO> selectNormalList(@Param("billNo") String billNo);
	void updateTimer(PjInfoBean pjInfoBean);

	/**
	 * 流程终止相关字段修改
	 * @param pjInfo
	 * @return
	 */
	int processTermination(PjInfoBean pjInfo);

	/**
	 * 开票及到账确认流程节点
	 */
	void updatePayment(PjInfoBean pjInfoBean);

	/**
	 * 竣工资料手续节点
	 */
	void updateCheckProcedures(PjInfoBean pjInfoBean);

	/**
	 * 工程收入
	 */
	void savePayment(PjInfoBean pjInfoBean);
}
